package com.example.lock;

/**
 * Create with Intellij idea
 * User:mingtian
 * Date:2018/10/21
 * Time:16:43
 */

public class OrderService implements Runnable {

    private OrderNumberGenerator orderNumberGenerator = new OrderNumberGenerator();
    private ExtLock extLock = new ZookeeperDistrbuteLock();

    @Override
    public void run() {
        getOrderNumber();
    }

    /**
     * 使用synchronized 目的是保证线程安全问题，只能让一个线程进行操作
     */
    public synchronized void getOrderNumber() {
        try {
            extLock.getLock();
            String orderNumber = orderNumberGenerator.getOrderNumber();
            System.out.println(Thread.currentThread().getName() + ",orderNumber：" + orderNumber);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            extLock.unLock();
        }


    }

    /**
     * 如果服务器是单机版本，生成订单号可以使用synchronized  或者是Lock锁保证线程安全问题
     *
     * @param args
     */
    public static void main(String[] args) {
        //多个线程共享同一个全局id count
//        OrderService orderService=new OrderService();
//        for (int i=0;i<200;i++){
//            new Thread(orderService).start();
//        }
        //模拟分布式锁场景
        for (int i = 0; i < 200; i++) {
            new Thread(new OrderService()).start();
        }
    }
}
